/*
* Copyright (c) 2007 by Kirill Kolodyazhniy.
* See the file "license.terms" for information on usage and redistribution.
*/

#ifndef M_TYPES_H
#define M_TYPES_H

#include "weakptr.h"

namespace Engine
{
	class Camera;
	typedef WeakPtr<Camera> CameraPtr;

	class RenderTarget;
	typedef WeakPtr<RenderTarget> RenderTargetPtr;

	class SceneManager;
	typedef WeakPtr<SceneManager> SceneManagerPtr;

	class Entity;
	typedef WeakPtr<Entity> EntityPtr;

	class MovableObject;
	typedef WeakPtr<MovableObject> MovableObjectPtr;

	class MovableObjectFactory;
	typedef WeakPtr<MovableObjectFactory> MovableObjectFactoryPtr;

	class Renderable;
	typedef WeakPtr<Renderable> RenderablePtr;

	class RenderSystem;
	typedef WeakPtr<RenderSystem> RenderSystemPtr;

	class DXRenderSystem;
	typedef WeakPtr<DXRenderSystem> DXRenderSystemPtr;

	class RenderWindow;
	typedef WeakPtr<RenderWindow> RenderWindowPtr;

	class Resource;
	typedef WeakPtr<Resource> ResourcePtr;

	class SceneNode;
	typedef WeakPtr<SceneNode> SceneNodePtr;

	class Light;
	typedef WeakPtr<Light> LightPtr;

	class Mesh;
	class MeshFactory;
	typedef WeakPtr<Mesh> MeshPtr;

	class SubMesh;
	typedef WeakPtr<SubMesh> SubMeshPtr;

	class Material;
	class MaterialFactory;
	typedef WeakPtr<Material> MaterialPtr;

	class CGMaterialFactory;

	class MovableObjectVisitor;
	typedef WeakPtr<MovableObjectVisitor> MovableObjectVisitorPtr;

	class DXRenderWindow;
	typedef WeakPtr<DXRenderWindow> DXRenderWindowPtr;

	class RenderData;
	typedef WeakPtr<RenderData> RenderDataPtr;

	class DXRenderData;
	typedef WeakPtr<DXRenderData> DXRenderDataPtr;

	class VertexBuffer;
	typedef WeakPtr<VertexBuffer> VertexBufferPtr;

	class IndexBuffer;
	typedef WeakPtr<IndexBuffer> IndexBufferPtr;

	class ArchiveFactory;
	typedef WeakPtr<ArchiveFactory> ArchiveFactoryPtr;

	class ResourceFactory;
	typedef WeakPtr<ResourceFactory> ResourceFactoryPtr;

	class RenderQueue;
	typedef WeakPtr<RenderQueue> RenderQueuePtr;

	class DXRenderWindowInfo;

	class HardWareBuffer;
	typedef WeakPtr<HardWareBuffer> HardWareBufferPtr;

	class VertexDeclaration;
	typedef WeakPtr<VertexDeclaration> VertexDeclarationPtr;

	class Technique;
	typedef WeakPtr<Technique> TechniquePtr;

	class Pass;
	typedef WeakPtr<Pass> PassPtr;

	class InputSystem;
	typedef WeakPtr<InputSystem> InputSystemPtr;

	class Texture;
	typedef WeakPtr<Texture> TexturePtr;

	class DXTexture;
	typedef WeakPtr<DXTexture> DXTexturePtr;

	class TextureFactory;
	typedef WeakPtr<TextureFactory> TextureFactoryPtr;

	class DXTextureFactory;
	typedef WeakPtr<DXTextureFactory> DXTextureFactoryPtr;

	class OctreeNode;
	typedef WeakPtr<OctreeNode> OctreeNodePtr;

	class Light;
	typedef WeakPtr<Light> LightPtr;

	class ParticleSystem;
	typedef WeakPtr<ParticleSystem> ParticleSystemPtr;

	class PhysicSystem;
	typedef WeakPtr<PhysicSystem> PhysicSystemPtr;

	class Space;
	typedef WeakPtr<Space> SpacePtr;

	class Solid;
	typedef WeakPtr<Solid> SolidPtr;

	class PhysicMaterial;
	typedef WeakPtr<PhysicMaterial> PhysicMaterialPtr;
}

#endif
